package br.skytef.stmanager.daos;

import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import br.skytef.stmanager.entities.GridClienteEntity;
import br.skytef.stmanager.utils.Pool;


public class GridClienteDAO {

	java.sql.Connection conexao;

	private static final String SELECT = "SELECT Cli.idCliente, Cli.razaoSocial, Cli.cnpj, Cli.nomeFantasia, Cli.cidade, "
			+ "Cli.uf, Cli.emailCliente, Sof.nome AS softwareHouse, Pro.nome AS produtoNome, "
			+ "Pro.valorCusto AS produtoValor, Com.nome AS comercialNome, Com.telefone AS "
			+ "comercialTelefone, Com.email AS comercialEmail, Ctt.nome AS contatoNome, "
			+ "Ctt.telefone AS contatoTelefone, Ctt.email AS contatoEmail, Dvg.nomePlanilha "
			+ "AS planilhaDivergente, Dvg.tipo AS tipoDivergencia, Dvg.valor "
			+ "AS divergenciaValor, Dvg.data_divergencia AS dataDivergencia, Cli.valorFaturado, Cli.valorSE, Cli.valorGSurf, "
			+ "Cli.valorLyra, Cli.qtdPDV, Cli.idFaturamento, Cli.idSuporte, Cli.idParceiro, Cli.qtdLojas, Cli.data_inclusao, PC.dataAtivacao , pa.razaoSocial as nomeParceiro "
			+ "FROM cliente Cli "
			+ "LEFT JOIN SoftwareHouse Sof     ON Cli.idCliente = Sof.cliente_idCliente "
			+ "LEFT JOIN produtoCliente PC     ON Cli.idCliente = PC.cliente_idCliente "
			+ "LEFT JOIN produto Pro           ON PC.produto_id = Pro.id "
			+ "LEFT JOIN comercialCliente CC   ON Cli.idCliente = CC.cliente_idCliente "
			+ "LEFT JOIN Comercial Com         ON CC.Comercial_id = Com.id "
			+ "LEFT JOIN clienteContato CCt    ON Cli.idCliente = CCt.cliente_idCliente "
			+ "LEFT JOIN contato Ctt           ON CCt.contato_id = Ctt.id "
			+ "LEFT JOIN divergenciaCliente Dvg ON Cli.idCliente = Dvg.cliente_idCliente "
			+ "LEFT JOIN cliente pa	ON Cli.idParceiro = pa.idCliente ";

	private static String WHERE;

	private List <GridClienteEntity> listar(){
		List<GridClienteEntity> clientes = null;
		try {
			conexao = Pool.getConnection();
			Statement st = conexao.createStatement();
			ResultSet rs = st.executeQuery(SELECT + WHERE);
			if (rs.next()) {   
				clientes = new ArrayList<GridClienteEntity>();
				do {
					GridClienteEntity cliente = new GridClienteEntity(
							rs.getInt("idCliente"), 
							rs.getString("razaoSocial"), 
							rs.getLong("cnpj"),
							rs.getString("nomeFantasia"), 
							rs.getString("cidade"),
							rs.getString("uf"),
							rs.getString("emailCliente"), 
							rs.getString("softwareHouse"),
							rs.getString("produtoNome"),
							rs.getDouble("produtoValor"),
							rs.getString("comercialNome"),
							rs.getString("comercialTelefone"), 
							rs.getString("comercialEmail"),
							rs.getString("contatoNome"),
							rs.getString("contatoTelefone"),
							rs.getString("contatoEmail"),
							rs.getString("planilhaDivergente"), 
							rs.getString("tipoDivergencia"),
							rs.getDouble("divergenciaValor"),
							rs.getTimestamp("dataDivergencia"),
							rs.getDouble("valorFaturado"),
							rs.getDouble("valorSE"),
							rs.getDouble("valorGSurf"),
							rs.getDouble("valorLyra"),
							rs.getInt("qtdPDV"),
							rs.getInt("idFaturamento"), 
							rs.getInt("idSuporte"),
							rs.getInt("idParceiro"),
							rs.getInt("qtdLojas"),
							rs.getTimestamp("data_inclusao"),
							rs.getString("dataAtivacao"),
							rs.getString("nomeParceiro")
							);
					clientes.add(cliente);	
					
				} while (rs.next());

			}
			conexao.close();
			return clientes;
		}catch (Exception e) {
			return null;
		}
	}

	public List <GridClienteEntity> listarClientes(){
		WHERE = ";";
		return listar();
	}
	public List <GridClienteEntity> listarClientes(String div){
		WHERE = "WHERE Dvg.tipo = '"+ div +"';";
		return listar();
	}
	public List <GridClienteEntity> listarCoerentes(){
		WHERE = "WHERE Dvg.tipo IS null;";
		return listar();
	}
	
}
